package io.linfeng.service.im.server;

import io.minio.Result;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @author RJF
 * @date create at 2024-05-2024/5/7-19:15
 * minio
 */
public interface MinioService {
    /**
     * 文件上传
     * @param multipartFile
     * @return
     * @throws Exception
     */
    String putObject(MultipartFile multipartFile) throws Exception;

    /**
     * 文件下载
     * @param fileName
     * @param response
     */
    void download(String fileName, HttpServletResponse response);

    /**
     * 列出所有存储桶名称
     * @return
     */
    public List<String> listBucketNames() throws Exception ;

    /**
     * 查看所有桶
     * @return
     * @throws Exception
     */
    List<Bucket> listBuckets() throws Exception;

    /**
     * 是否存在桶
     * @param bucketName
     * @return
     * @throws Exception
     */
    boolean bucketExists(String bucketName) throws Exception;

    /**
     * 创建桶
     * @param bucketName
     * @return
     * @throws Exception
     */
    boolean makeBucket(String bucketName) throws Exception;

    /**
     * 删除桶
     */
    boolean removeBucket(String bucketName) throws Exception;

    /**
     * 列出桶
     * @param bucketName
     * @return
     * @throws Exception
     */
    Iterable<Result<Item>> listObjects(String bucketName) throws Exception;

    /**
     * 列出存储桶中的所有对象名称
     * @param bucketName
     * @return
     * @throws Exception
     */
    List<String> listObjectNames(String bucketName) throws Exception;

    /**
     * 删除一个对象
     *
     * @param bucketName 存储桶名称
     * @param objectName 存储桶里的对象名称
     * @throws Exception
     */
    boolean removeObject(String bucketName, String objectName) throws Exception;

    /**
     * 文件访问路径
     *
     * @param bucketName 存储桶名称
     * @param objectName 存储桶里的对象名称
     * @return
     * @throws Exception
     */
    String getObjectUrl(String bucketName, String objectName) throws Exception;
}
